cubicweb/pyramid/test/test_config.py
author Laurent Peuch <cortex@worlddomination.be>
Wed, 15 May 2019 12:05:52 +0200
changeset 12600 0f33639d305b
parent 12568 fc45f22c8100
permissions -rw-r--r--
[pyramid/test] add test for pyramid.ini generation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12053
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     1
# copyright 2017 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     3
#
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     4
# This file is part of CubicWeb.
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     5
#
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
     9
# any later version.
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    10
#
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    14
# details.
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    15
#
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    18
"""Tests for cubicweb.pyramid.config module."""
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    19
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    20
import os
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    21
from os import path
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12562
diff changeset
    22
from tempfile import TemporaryDirectory
12053
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    23
from unittest import TestCase
12568
fc45f22c8100 [test] use unittest.mock instead of mock library
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12567
diff changeset
    24
from unittest.mock import patch
12053
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    25
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    26
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    27
from cubicweb.pyramid import config
12600
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    28
from cubicweb.pyramid.pyramidctl import _generate_pyramid_ini_file
12053
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    29
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    30
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    31
class PyramidConfigTC(TestCase):
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    32
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    33
    def test_get_random_secret_key(self):
12562
7bb677060ebd [pyramid/security] use cryptographically secure random generator
Laurent Peuch <cortex@worlddomination.be>
parents: 12053
diff changeset
    34
        with patch('random.SystemRandom.choice', return_value='0') as patched_choice:
12053
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    35
            secret = config.get_random_secret_key()
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    36
        self.assertEqual(patched_choice.call_count, 50)
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    37
        self.assertEqual(secret, '0' * 50)
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    38
12600
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    39
    def test_write_pyramid_ini(self):
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    40
        with TemporaryDirectory() as instancedir:
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    41
            pyramid_ini_path = path.join(instancedir, "pyramid.ini")
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    42
            with patch('random.SystemRandom.choice', return_value='0') as patched_choice:
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    43
                _generate_pyramid_ini_file(pyramid_ini_path)
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    44
            with open(path.join(instancedir, 'pyramid.ini')) as f:
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    45
                lines = f.readlines()
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    46
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    47
        self.assertEqual(patched_choice.call_count, 50 * 3)
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    48
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    49
        secret = '0' * 50
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    50
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    51
        for option in ('cubicweb.session.secret',
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    52
                       'cubicweb.auth.authtkt.persistent.secret',
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    53
                       'cubicweb.auth.authtkt.session.secret'):
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    54
            self.assertIn('{} = {}\n'.format(option, secret), lines)
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    55
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    56
        for option in ('cubicweb.auth.authtkt.persistent.secure',
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    57
                       'cubicweb.auth.authtkt.session.secure'):
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    58
            self.assertIn('{} = {}\n'.format(option, "no"), lines)
0f33639d305b [pyramid/test] add test for pyramid.ini generation
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    59
12053
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    60
    def test_write_development_ini(self):
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    61
        with TemporaryDirectory() as instancedir:
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    62
            appid = 'pyramid-instance'
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    63
            os.makedirs(path.join(instancedir, appid))
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    64
            os.environ['CW_INSTANCES_DIR'] = instancedir
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    65
            try:
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    66
                cfg = config.CubicWebPyramidConfiguration(appid)
12562
7bb677060ebd [pyramid/security] use cryptographically secure random generator
Laurent Peuch <cortex@worlddomination.be>
parents: 12053
diff changeset
    67
                with patch('random.SystemRandom.choice', return_value='0') as patched_choice:
12053
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    68
                    cfg.write_development_ini(['foo', 'bar'])
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    69
            finally:
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    70
                os.environ.pop('CW_INSTANCES_DIR')
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    71
            with open(path.join(instancedir, appid, 'development.ini')) as f:
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    72
                lines = f.readlines()
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    73
        self.assertEqual(patched_choice.call_count, 50 * 3)
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    74
        secret = '0' * 50
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    75
        for option in ('cubicweb.session.secret',
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    76
                       'cubicweb.auth.authtkt.persistent.secret',
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    77
                       'cubicweb.auth.authtkt.session.secret'):
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    78
            self.assertIn('{} = {}\n'.format(option, secret), lines)
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    79
        self.assertIn('cubicweb.instance = {}\n'.format(appid), lines)
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    80
        self.assertIn('    cubicweb_foo\n', lines)
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    81
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    82
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    83
if __name__ == '__main__':
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    84
    import unittest
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
diff changeset
    85
    unittest.main()