cubicweb/web/test/unittest_propertysheet.py
author Philippe Pepiot <ph@itsalwaysdns.eu>
Tue, 31 Mar 2020 18:22:05 +0200
changeset 12966 6cd938c29ca3
parent 12289 b86214011758
permissions -rw-r--r--
[server] Make connection pooler configurable and set better default values Drop the configuration connections-pool-size and add new configurations options: * connections-pool-min-size. Set to 0 by default so we open connections only when needed. This avoid opening min-size*processes connections at startup, which is, it think, a good default. * connections-pool-max-size. Set to 0 (unlimited) by default, so we move the bottleneck to postgresql. * connections-idle-timeout. Set to 10 minutes. I don't have arguments about this except that this is the default in pgbouncer.

import os
from os.path import join, dirname
from shutil import rmtree
import errno
import tempfile
from unittest import TestCase, main

from cubicweb.web.propertysheet import PropertySheet, lazystr


DATADIR = join(dirname(__file__), 'data')


class PropertySheetTC(TestCase):

    def setUp(self):
        uicache = join(DATADIR, 'uicache')
        try:
            os.makedirs(uicache)
        except OSError as err:
            if err.errno != errno.EEXIST:
                raise
        self.cachedir = tempfile.mkdtemp(dir=uicache)

    def tearDown(self):
        rmtree(self.cachedir)

    def data(self, filename):
        return join(DATADIR, filename)

    def test(self):
        ps = PropertySheet(self.cachedir, datadir_url='http://cwtest.com')
        ps.load(self.data('sheet1.py'))
        ps.load(self.data('sheet2.py'))
        # defined by sheet1
        self.assertEqual(ps['logo'], 'http://cwtest.com/logo.png')
        # defined by sheet1, overriden by sheet2
        self.assertEqual(ps['bgcolor'], '#FFFFFF')
        # defined by sheet2
        self.assertEqual(ps['fontcolor'], 'black')
        # defined by sheet1, extended by sheet2
        self.assertEqual(ps['stylesheets'], ['http://cwtest.com/cubicweb.css',
                                             'http://cwtest.com/mycube.css'])
        # lazy string defined by sheet1
        self.assertIsInstance(ps['lazy'], lazystr)
        self.assertEqual(str(ps['lazy']), '#FFFFFF')
        # test compilation
        self.assertEqual(ps.compile('a {bgcolor: %(bgcolor)s; size: 1%;}'),
                         'a {bgcolor: #FFFFFF; size: 1%;}')
        self.assertEqual(ps.process_resource(DATADIR, 'pouet.css'),
                         self.cachedir)
        self.assertFalse(ps.need_reload())
        os.utime(self.data('sheet1.py'), None)
        self.assertTrue(ps.need_reload())
        ps.reload()
        self.assertFalse(ps.need_reload())
        ps.process_resource(DATADIR, 'pouet.css')  # put in cache
        os.utime(self.data('pouet.css'), None)
        self.assertFalse(ps.need_reload())

    def test_chmod(self):
        ps = PropertySheet(self.cachedir, datadir_url='http://cwtest.com')
        ps.load(self.data('sheet1.py'))
        rdir = ps.process_resource(DATADIR, 'pouet.css')
        mode = os.stat(join(rdir, 'pouet.css')).st_mode
        self.assertEqual(('%o' % mode)[-4:], '0644')


if __name__ == '__main__':
    main()