author | Laurent Peuch <cortex@worlddomination.be> |
Thu, 05 Dec 2019 18:37:27 +0100 | |
changeset 12805 | 8cf02773a6b3 |
parent 12600 | 0f33639d305b |
permissions | -rw-r--r-- |
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() |