96 lines
2.2 KiB
Python
Executable File
96 lines
2.2 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
"""
|
|
Huge oldversions difference tester, optionally diff with the one in
|
|
$PATH as well.
|
|
|
|
Arguments will be passed on to Scyther for all the protocols in the
|
|
set. (protocollist.py?)
|
|
"""
|
|
|
|
import os
|
|
import os.path
|
|
import commands
|
|
import protocollist
|
|
|
|
oldversionspath="../oldversions"
|
|
oldversionsprefix="scyther"
|
|
|
|
def get_versions(step=1):
|
|
global oldversionspat
|
|
global oldversionsprefix
|
|
|
|
l = os.listdir(oldversionspath)
|
|
rl = []
|
|
i = 0
|
|
for fn in l:
|
|
if fn.startswith(oldversionsprefix):
|
|
if i == 0:
|
|
rl.append(fn[len(oldversionsprefix):])
|
|
i = (i+1) % step
|
|
rl.sort()
|
|
rl.append(-1) # denoting the current version
|
|
return rl
|
|
|
|
def run_version(version,args):
|
|
global oldversionspat
|
|
global oldversionsprefix
|
|
|
|
if version == -1:
|
|
prg = "scyther"
|
|
else:
|
|
prg = "%s/%s%s" % (oldversionspath, oldversionsprefix, version)
|
|
|
|
out = commands.getoutput("%s %s" % (prg,args))
|
|
return out
|
|
|
|
def test_all_protocols(version, args):
|
|
print "Testing version %s" % version
|
|
l = protocollist.from_all()
|
|
res = {}
|
|
for fn in l:
|
|
res[fn] = run_version(version, "%s %s" % (args,fn))
|
|
return res
|
|
|
|
def test_all(versions,args):
|
|
res = {}
|
|
for v in versions:
|
|
res[v] = test_all_protocols(v,args)
|
|
return res
|
|
|
|
def main():
|
|
vl = get_versions(150)
|
|
res = test_all(vl,"-r2")
|
|
l = protocollist.from_all()
|
|
changes = {}
|
|
for p in l:
|
|
ln = len(vl)
|
|
for i in range(0,(ln-1)):
|
|
v1 = vl[i]
|
|
v2 = vl[i+1]
|
|
if str(res[v1][p]) != str(res[v2][p]):
|
|
|
|
if v2 in changes.keys():
|
|
changes[v2].append(p)
|
|
else:
|
|
changes[v2] = [p]
|
|
|
|
print "*" * 80
|
|
print "Found difference for protocol %s, between versions %s and %s" % (p,v1,v2)
|
|
print
|
|
print "<" * 80
|
|
print res[v1][p]
|
|
print "=" * 80
|
|
print res[v2][p]
|
|
print ">" * 80
|
|
|
|
print
|
|
for x in changes.keys():
|
|
print "For version %s, %i protocols changed." % (x,len(changes[x]))
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
|