test/test_parser.py
author Johnny Wezel<j@wezel.name>
Sun, 07 Feb 2016 22:30:17 +0100
branchpython3
changeset 70 1fe2c20adeba
parent 12 c57439b500cb
child 97 44522cd37b07
permissions -rw-r--r--
Python3 support
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
70
1fe2c20adeba Python3 support
Johnny Wezel<j@wezel.name>
parents: 12
diff changeset
     1
from __future__ import print_function
1fe2c20adeba Python3 support
Johnny Wezel<j@wezel.name>
parents: 12
diff changeset
     2
from __future__ import unicode_literals
1fe2c20adeba Python3 support
Johnny Wezel<j@wezel.name>
parents: 12
diff changeset
     3
from __future__ import division
1fe2c20adeba Python3 support
Johnny Wezel<j@wezel.name>
parents: 12
diff changeset
     4
from __future__ import absolute_import
1fe2c20adeba Python3 support
Johnny Wezel<j@wezel.name>
parents: 12
diff changeset
     5
from future import standard_library
1fe2c20adeba Python3 support
Johnny Wezel<j@wezel.name>
parents: 12
diff changeset
     6
standard_library.install_aliases()
1fe2c20adeba Python3 support
Johnny Wezel<j@wezel.name>
parents: 12
diff changeset
     7
from builtins import *
0
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
     8
import unittest
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
     9
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    10
import os
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    11
import sys
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    12
sys.path.append('../')
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    13
12
c57439b500cb fixed test cases
Richard Baron Penman
parents: 0
diff changeset
    14
import datetime
0
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    15
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    16
import simplejson
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    17
from glob import glob
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    18
12
c57439b500cb fixed test cases
Richard Baron Penman
parents: 0
diff changeset
    19
from whois.parser import WhoisEntry, cast_date
0
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    20
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    21
class TestParser(unittest.TestCase):
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    22
    def test_com_expiration(self):
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    23
        data = """
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    24
            Status: ok
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    25
            Updated Date: 14-apr-2008
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    26
            Creation Date: 14-apr-2008
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    27
            Expiration Date: 14-apr-2009
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    28
            
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    29
            >>> Last update of whois database: Sun, 31 Aug 2008 00:18:23 UTC <<<
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    30
        """
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    31
        w = WhoisEntry.load('urlowl.com', data)
12
c57439b500cb fixed test cases
Richard Baron Penman
parents: 0
diff changeset
    32
        expires = w.expiration_date.strftime('%Y-%m-%d')
c57439b500cb fixed test cases
Richard Baron Penman
parents: 0
diff changeset
    33
        self.assertEquals(expires, '2009-04-14')
0
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    34
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    35
    def test_cast_date(self):
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    36
        dates = ['14-apr-2008', '2008-04-14']
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    37
        for d in dates:
12
c57439b500cb fixed test cases
Richard Baron Penman
parents: 0
diff changeset
    38
            r = cast_date(d).strftime('%Y-%m-%d')
0
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    39
            self.assertEquals(r, '2008-04-14')
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    40
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    41
    def test_com_allsamples(self):
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    42
        """
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    43
        Iterate over all of the sample/whois/*.com files, read the data,
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    44
        parse it, and compare to the expected values in sample/expected/.
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    45
        Only keys defined in keys_to_test will be tested.
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    46
        
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    47
        To generate fresh expected value dumps, see NOTE below.
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    48
        """
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    49
        keys_to_test = ['domain_name', 'expiration_date', 'updated_date', 'creation_date', 'status']
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    50
        fail = 0
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    51
        for path in glob('test/samples/whois/*.com'):
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    52
            # Parse whois data
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    53
            domain = os.path.basename(path)
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    54
            whois_fp = open(path)
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    55
            data = whois_fp.read()
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    56
            
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    57
            w = WhoisEntry.load(domain, data)
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    58
            results = {}
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    59
            for key in keys_to_test:
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    60
                results[key] = w.get(key)
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    61
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    62
            # Load expected result
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    63
            expected_fp = open(os.path.join('test/samples/expected/', domain))
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    64
            expected_results = simplejson.load(expected_fp)
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    65
            
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    66
            # NOTE: Toggle condition below to write expected results from the parse results
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    67
            # This will overwrite the existing expected results. Only do this if you've manually
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    68
            # confirmed that the parser is generating correct values at its current state.
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    69
            if False:
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    70
                expected_fp = open(os.path.join('test/samples/expected/', domain), 'w')
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    71
                expected_results = simplejson.dump(results, expected_fp)
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    72
                continue
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    73
            
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    74
            # Compare each key
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    75
            for key in results:
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    76
                result = results.get(key)
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    77
                expected = expected_results.get(key)
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    78
                if expected != result:
70
1fe2c20adeba Python3 support
Johnny Wezel<j@wezel.name>
parents: 12
diff changeset
    79
                    print("%s \t(%s):\t %s != %s" % (domain, key, result, expected))
0
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    80
                    fail += 1
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    81
            
ea0e45971cea initial commit to mercurial
Richard Baron Penman
parents:
diff changeset
    82
        if fail:
12
c57439b500cb fixed test cases
Richard Baron Penman
parents: 0
diff changeset
    83
            self.fail("%d sample whois attributes were not parsed properly!" % fail)
c57439b500cb fixed test cases
Richard Baron Penman
parents: 0
diff changeset
    84
c57439b500cb fixed test cases
Richard Baron Penman
parents: 0
diff changeset
    85
c57439b500cb fixed test cases
Richard Baron Penman
parents: 0
diff changeset
    86
if __name__ == '__main__':
c57439b500cb fixed test cases
Richard Baron Penman
parents: 0
diff changeset
    87
    unittest.main()