cubicweb/server/test/unittest_utils.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Fri, 05 Apr 2019 17:58:19 +0200
changeset 12567 26744ad37953
parent 12011 d2888fee6031
permissions -rw-r--r--
Drop python2 support This mostly consists in removing the dependency on "six" and updating the code to use only Python3 idioms. Notice that we previously used TemporaryDirectory from cubicweb.devtools.testlib for compatibility with Python2. We now directly import it from tempfile.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8414
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     1
# copyright 2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     3
#
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     4
# This file is part of CubicWeb.
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     5
#
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     9
# any later version.
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    10
#
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    14
# details.
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    15
#
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
12007
b82cda5ba3bf [test] Flake8-clean and use stdlib unittest in cubicweb/server/test/unittest_utils.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    18
"""Tests for cubicweb.server.utils module."""
8414
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    19
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12011
diff changeset
    20
import sched
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12011
diff changeset
    21
12011
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    22
from cubicweb.devtools import testlib
8414
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    23
from cubicweb.server import utils
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    24
12007
b82cda5ba3bf [test] Flake8-clean and use stdlib unittest in cubicweb/server/test/unittest_utils.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    25
12011
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    26
class UtilsTC(testlib.BaseTestCase):
12007
b82cda5ba3bf [test] Flake8-clean and use stdlib unittest in cubicweb/server/test/unittest_utils.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    27
8414
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    28
    def test_crypt(self):
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    29
        for hash in (
12007
b82cda5ba3bf [test] Flake8-clean and use stdlib unittest in cubicweb/server/test/unittest_utils.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    30
            utils.crypt_password('xxx'),  # default sha512
b82cda5ba3bf [test] Flake8-clean and use stdlib unittest in cubicweb/server/test/unittest_utils.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    31
            b'ab$5UsKFxRKKN.d8iBIFBnQ80',  # custom md5
b82cda5ba3bf [test] Flake8-clean and use stdlib unittest in cubicweb/server/test/unittest_utils.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    32
            b'ab4Vlm81ZUHlg',  # DES
b82cda5ba3bf [test] Flake8-clean and use stdlib unittest in cubicweb/server/test/unittest_utils.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    33
        ):
8414
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    34
            self.assertEqual(utils.crypt_password('xxx', hash), hash)
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    35
            self.assertEqual(utils.crypt_password(u'xxx', hash), hash)
12007
b82cda5ba3bf [test] Flake8-clean and use stdlib unittest in cubicweb/server/test/unittest_utils.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    36
            self.assertEqual(utils.crypt_password(u'xxx', hash.decode('ascii')),
b82cda5ba3bf [test] Flake8-clean and use stdlib unittest in cubicweb/server/test/unittest_utils.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    37
                             hash.decode('ascii'))
10775
4b3c1069bd4e Fix md5crypt and crypt_password test for python3
Julien Cristau <julien.cristau@logilab.fr>
parents: 8414
diff changeset
    38
            self.assertEqual(utils.crypt_password('yyy', hash), b'')
8414
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    39
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    40
        # accept any password for empty hashes (is it a good idea?)
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    41
        self.assertEqual(utils.crypt_password('xxx', ''), '')
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    42
        self.assertEqual(utils.crypt_password('yyy', ''), '')
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    43
12011
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    44
    def test_schedule_periodic_task(self):
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12011
diff changeset
    45
        scheduler = sched.scheduler()
12011
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    46
        this = []
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    47
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    48
        def fill_this(x):
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    49
            this.append(x)
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    50
            if len(this) > 2:
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    51
                raise SystemExit()
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    52
            elif len(this) > 1:
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    53
                raise RuntimeError()
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    54
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    55
        event = utils.schedule_periodic_task(scheduler, 0.01, fill_this, 1)
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    56
        self.assertEqual(event.action.__name__, 'fill_this')
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    57
        self.assertEqual(len(scheduler.queue), 1)
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    58
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    59
        with self.assertLogs('cubicweb.scheduler', level='ERROR') as cm:
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    60
            scheduler.run()
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    61
        self.assertEqual(this, [1] * 3)
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    62
        self.assertEqual(len(cm.output), 2)
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    63
        self.assertIn('Unhandled exception in periodic task "fill_this"',
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    64
                      cm.output[0])
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    65
        self.assertIn('"fill_this" not re-scheduled', cm.output[1])
d2888fee6031 [server] introduce a scheduler class to run repository "looping tasks"
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12007
diff changeset
    66
8414
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    67
e7243ed7bb0a Fixes for compatibility with passlib 1.6 (closes #2356393)
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    68
if __name__ == '__main__':
12007
b82cda5ba3bf [test] Flake8-clean and use stdlib unittest in cubicweb/server/test/unittest_utils.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    69
    import unittest
b82cda5ba3bf [test] Flake8-clean and use stdlib unittest in cubicweb/server/test/unittest_utils.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    70
    unittest.main()