import os
import tempfile
import shutil
import time
import sys
from gzip import GzipFile
from random import randint
from array import array
from itertools import izip

def log_line():
    chars = array('B', [randint(32,127) for _ in xrange(randint(40,120))])
    return '[%s] %s\n' % (time.ctime(), chars.tostring())

def main(lines=10000, repeat=10):
    outdir = tempfile.mkdtemp()
    try:
        print 'writing test file...',
        sys.stdout.flush()
        t = time.time()
        fn = os.path.join(outdir, 'gzipbench.gz')
        outfile = GzipFile(fn, 'wb')
        log_lines = [log_line() for x in xrange(lines)]
        outfile.writelines(log_lines)
        outfile.close()
        print '%.2f sec' % (time.time() - t,)

        print 'reading test file...',
        sys.stdout.flush()
        t = time.time()
        for i in xrange(repeat):
            infile = GzipFile(fn)
            lines = 0
            for test, orig in izip(infile, log_lines):
                lines += 1
                assert test == orig
            assert lines == len(log_lines)
        print '%.2f sec' % (time.time() - t,)
    finally:
        shutil.rmtree(outdir)

if __name__ == '__main__':
    main()
