123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- # -*- coding: utf-8 -*-
- '''Core plugins unit tests'''
- import os
- import tempfile
- import unittest
- import time
- from contextlib import contextmanager
- from tempfile import mkdtemp
- from shutil import rmtree
- from hashlib import md5
- import gzip_cache
- @contextmanager
- def temporary_folder():
- """creates a temporary folder, return it and delete it afterwards.
- This allows to do something like this in tests:
- >>> with temporary_folder() as d:
- # do whatever you want
- """
- tempdir = mkdtemp()
- try:
- yield tempdir
- finally:
- rmtree(tempdir)
- class TestGzipCache(unittest.TestCase):
- def test_should_compress(self):
- # Some filetypes should compress and others shouldn't.
- self.assertTrue(gzip_cache.should_compress('foo.html'))
- self.assertTrue(gzip_cache.should_compress('bar.css'))
- self.assertTrue(gzip_cache.should_compress('baz.js'))
- self.assertTrue(gzip_cache.should_compress('foo.txt'))
- self.assertFalse(gzip_cache.should_compress('foo.gz'))
- self.assertFalse(gzip_cache.should_compress('bar.png'))
- self.assertFalse(gzip_cache.should_compress('baz.mp3'))
- self.assertFalse(gzip_cache.should_compress('foo.mov'))
- def test_should_overwrite(self):
- # Default to false if GZIP_CACHE_OVERWRITE is not set
- settings = { }
- self.assertFalse(gzip_cache.should_overwrite(settings))
- settings = { 'GZIP_CACHE_OVERWRITE': False }
- self.assertFalse(gzip_cache.should_overwrite(settings))
- settings = { 'GZIP_CACHE_OVERWRITE': True }
- self.assertTrue(gzip_cache.should_overwrite(settings))
- def test_creates_gzip_file(self):
- # A file matching the input filename with a .gz extension is created.
- # The plugin walks over the output content after the finalized signal
- # so it is safe to assume that the file exists (otherwise walk would
- # not report it). Therefore, create a dummy file to use.
- with temporary_folder() as tempdir:
- _, a_html_filename = tempfile.mkstemp(suffix='.html', dir=tempdir)
- gzip_cache.create_gzip_file(a_html_filename, False)
- self.assertTrue(os.path.exists(a_html_filename + '.gz'))
- def test_creates_same_gzip_file(self):
- # Should create the same gzip file from the same contents.
- # gzip will create a slightly different file because it includes
- # a timestamp in the compressed file by default. This can cause
- # problems for some caching strategies.
- with temporary_folder() as tempdir:
- _, a_html_filename = tempfile.mkstemp(suffix='.html', dir=tempdir)
- a_gz_filename = a_html_filename + '.gz'
- gzip_cache.create_gzip_file(a_html_filename, False)
- gzip_hash = get_md5(a_gz_filename)
- time.sleep(1)
- gzip_cache.create_gzip_file(a_html_filename, False)
- self.assertEqual(gzip_hash, get_md5(a_gz_filename))
- def test_overwrites_gzip_file(self):
- # A file matching the input filename with a .gz extension is not created.
- # The plugin walks over the output content after the finalized signal
- # so it is safe to assume that the file exists (otherwise walk would
- # not report it). Therefore, create a dummy file to use.
- with temporary_folder() as tempdir:
- _, a_html_filename = tempfile.mkstemp(suffix='.html', dir=tempdir)
- gzip_cache.create_gzip_file(a_html_filename, True)
- self.assertFalse(os.path.exists(a_html_filename + '.gz'))
- def get_md5(filepath):
- with open(filepath, 'rb') as fh:
- return md5(fh.read()).hexdigest()
|