iptables_optimizer_tests.py - unittests

nosetests

The two python classes come along with some unittests. A reference-input file is present as it is needed to run the tests. The prepared nosetests show like this:

nostests -v --with-coverage

Chain_Test: create a chainobject ... ok
Chain_Test: make partitions from no rules ... ok
Chain_Test: make partitions from one rule a ... ok
Chain_Test: make partitions from one rule d ... ok
Chain_Test: make partitions from one rule r ... ok
Chain_Test: make partitions from one rule l ... ok
Chain_Test: make partitions from two rules aa ... ok
Chain_Test: make partitions from two rules ad ... ok
Chain_Test: make partitions from five rules adaaa ... ok
Chain_Test: optimize an empty chainobject ... ok
Chain_Test: optimize three rules aaa ... ok
Chain_Test: optimize three rules aar ... ok
Chain_Test: optimize five rules aalaa ... ok
Filter_Test: non existant input-file ... ok
Filter_Test: read reference-input ... ok
Filter_Test: optimize, check 30 moves and partitions ... ok
Filter_Test: check output for reference-input ... ok


Name                 Stmts   Miss  Cover   Missing
--------------------------------------------------
iptables_optimizer     167     15    91%   33-34, 162-163, 236-246
----------------------------------------------------------------------
Ran 17 tests in 0.048s

OK

The missing statements are the following:

 33    except:
 34        pass    # python2.6

162        except:
163            self.chains = {}    # python2.6

236    file_to_read = "reference-input"
237    if len(sys.argv) > 1:
238        file_to_read = sys.argv[1]
239    try:
240        f = Filter(filename=file_to_read)
241        result, msg = f.opti()
242        sys.stderr.write(msg)  # print partition-table to stderr
243        outmsg = f.show()
244        print(outmsg),
245    except KeyboardInterrupt as err:
246        print("\rUser stopped, execution terminated")

That’s not perfect, but it seems to be sufficient.

tox

This is done with the operating systems standard python. For your convenience, a tox.ini is present as well for tests using different python versions, for now these are Python2.7 and Python3.5 which are used in debian jessie.

pep 8

tox runs a pep 8 test and and a pyflakes test as well, there are no complains.

Testing is great fun.