cubicweb/test/unittest_cwctl.py
author Laurent Peuch <cortex@worlddomination.be>
Mon, 22 Jul 2019 11:21:10 +0200
changeset 12696 eb83daa69495
parent 12695 38dfd90c335a
child 12735 17d1b1f4eddd
permissions -rw-r--r--
[cubicweb-ctl] respect sys.exit status code when aborting a command When exploring the stack of all calls to a cubicweb-ctl command, it has been discovered than on a KeyboardInterrupt and on a SystemExit exception the base class InstanceCommand (for commands that works on one instance) will always set the return code of cubicweb-ctl to 8: this mean that if another command do a `sys.exit(some_code)` the exit code will be ignored and overwritten by '8'. This behavior is not intuitive, apparently not documented and doesn't seems to have any justification. It also prevent commands from exciting with different return codes which could be a desired behavior in the situation of scripting.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9639
74b3db5bb41d [test] silence warnings for unittest_cwctl by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6632
diff changeset
     1
# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
     4
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
     9
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    10
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    18
import sys
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
import os
6631
26c303c3f1aa [test] make test independant from the working directory
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6197
diff changeset
    20
from os.path import join
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12121
diff changeset
    21
from io import StringIO
11469
e0538fee4caa [test] Use plain unittest in unittest_cwctl.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    22
import unittest
12685
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    23
from unittest.mock import patch, MagicMock
12120
707139a9eb00 [cwctl] Drop 'cubicweb_' prefix when displaying cubes with 'cubicweb-ctl list'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12053
diff changeset
    24
12685
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    25
from logilab.common.clcommands import CommandLine
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    26
12692
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
    27
from cubicweb import cwctl
12685
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    28
from cubicweb.cwctl import ListCommand, InstanceCommand
5430
ed8f71e244f8 [shell] #715938: support of script parameters (using standard '--' as arguments separator)
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5426
diff changeset
    29
from cubicweb.devtools.testlib import CubicWebTC
ed8f71e244f8 [shell] #715938: support of script parameters (using standard '--' as arguments separator)
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5426
diff changeset
    30
from cubicweb.server.migractions import ServerMigrationHelper
12685
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    31
from cubicweb.cwconfig import CubicWebConfiguration as cwcfg
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    32
from cubicweb.__pkginfo__ import version as cw_version
5430
ed8f71e244f8 [shell] #715938: support of script parameters (using standard '--' as arguments separator)
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5426
diff changeset
    33
12120
707139a9eb00 [cwctl] Drop 'cubicweb_' prefix when displaying cubes with 'cubicweb-ctl list'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12053
diff changeset
    34
import unittest_cwconfig
707139a9eb00 [cwctl] Drop 'cubicweb_' prefix when displaying cubes with 'cubicweb-ctl list'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12053
diff changeset
    35
5430
ed8f71e244f8 [shell] #715938: support of script parameters (using standard '--' as arguments separator)
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5426
diff changeset
    36
11469
e0538fee4caa [test] Use plain unittest in unittest_cwctl.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    37
class CubicWebCtlTC(unittest.TestCase):
12120
707139a9eb00 [cwctl] Drop 'cubicweb_' prefix when displaying cubes with 'cubicweb-ctl list'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12053
diff changeset
    38
    setUpClass = unittest_cwconfig.CubicWebConfigurationTC.setUpClass
707139a9eb00 [cwctl] Drop 'cubicweb_' prefix when displaying cubes with 'cubicweb-ctl list'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12053
diff changeset
    39
    tearDownClass = unittest_cwconfig.CubicWebConfigurationTC.tearDownClass
707139a9eb00 [cwctl] Drop 'cubicweb_' prefix when displaying cubes with 'cubicweb-ctl list'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12053
diff changeset
    40
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    41
    def setUp(self):
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12121
diff changeset
    42
        self.stream = StringIO()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    43
        sys.stdout = self.stream
11469
e0538fee4caa [test] Use plain unittest in unittest_cwctl.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    44
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    45
    def tearDown(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    46
        sys.stdout = sys.__stdout__
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 0
diff changeset
    47
12120
707139a9eb00 [cwctl] Drop 'cubicweb_' prefix when displaying cubes with 'cubicweb-ctl list'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12053
diff changeset
    48
    @patch('pkg_resources.iter_entry_points', side_effect=unittest_cwconfig.iter_entry_points)
707139a9eb00 [cwctl] Drop 'cubicweb_' prefix when displaying cubes with 'cubicweb-ctl list'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12053
diff changeset
    49
    def test_list(self, mock_iter_entry_points):
6197
d8f0dce0b86d [test] fixes to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5436
diff changeset
    50
        ListCommand(None).run([])
12120
707139a9eb00 [cwctl] Drop 'cubicweb_' prefix when displaying cubes with 'cubicweb-ctl list'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12053
diff changeset
    51
        self.assertNotIn('cubicweb_', self.stream.getvalue())
707139a9eb00 [cwctl] Drop 'cubicweb_' prefix when displaying cubes with 'cubicweb-ctl list'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12053
diff changeset
    52
        mock_iter_entry_points.assert_called_once_with(
707139a9eb00 [cwctl] Drop 'cubicweb_' prefix when displaying cubes with 'cubicweb-ctl list'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12053
diff changeset
    53
            group='cubicweb.cubes', name=None)
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 0
diff changeset
    54
12053
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12020
diff changeset
    55
    def test_list_configurations(self):
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12020
diff changeset
    56
        ListCommand(None).run(['configurations'])
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12020
diff changeset
    57
        configs = [l[2:].strip() for l in self.stream.getvalue().splitlines()
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12020
diff changeset
    58
                   if l.startswith('* ')]
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12020
diff changeset
    59
        self.assertIn('all-in-one', configs)
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12020
diff changeset
    60
        self.assertIn('pyramid', configs)
c3c9f2e1424c [pyramid] Add a "pyramid" instance configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12020
diff changeset
    61
5430
ed8f71e244f8 [shell] #715938: support of script parameters (using standard '--' as arguments separator)
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5426
diff changeset
    62
ed8f71e244f8 [shell] #715938: support of script parameters (using standard '--' as arguments separator)
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5426
diff changeset
    63
class CubicWebShellTC(CubicWebTC):
ed8f71e244f8 [shell] #715938: support of script parameters (using standard '--' as arguments separator)
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5426
diff changeset
    64
ed8f71e244f8 [shell] #715938: support of script parameters (using standard '--' as arguments separator)
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5426
diff changeset
    65
    def test_process_script_args_context(self):
9639
74b3db5bb41d [test] silence warnings for unittest_cwctl by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6632
diff changeset
    66
        repo = self.repo
10353
d9a1e7939ee6 [migractions] remove any session related leftovers
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9639
diff changeset
    67
        with self.admin_access.repo_cnx() as cnx:
9639
74b3db5bb41d [test] silence warnings for unittest_cwctl by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6632
diff changeset
    68
            mih = ServerMigrationHelper(None, repo=repo, cnx=cnx,
74b3db5bb41d [test] silence warnings for unittest_cwctl by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6632
diff changeset
    69
                                        interactive=False,
74b3db5bb41d [test] silence warnings for unittest_cwctl by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6632
diff changeset
    70
                                        # hack so it don't try to load fs schema
74b3db5bb41d [test] silence warnings for unittest_cwctl by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6632
diff changeset
    71
                                        schema=1)
12121
86ec847835cd Fix flake8 errors in unittest_cwctl
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12120
diff changeset
    72
            scripts = {
86ec847835cd Fix flake8 errors in unittest_cwctl
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12120
diff changeset
    73
                'script1.py': list(),
86ec847835cd Fix flake8 errors in unittest_cwctl
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12120
diff changeset
    74
                'script2.py': ['-v'],
86ec847835cd Fix flake8 errors in unittest_cwctl
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12120
diff changeset
    75
                'script3.py': ['-vd', '-f', 'FILE.TXT'],
86ec847835cd Fix flake8 errors in unittest_cwctl
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12120
diff changeset
    76
            }
9639
74b3db5bb41d [test] silence warnings for unittest_cwctl by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6632
diff changeset
    77
            mih.cmd_process_script(join(self.datadir, 'scripts', 'script1.py'),
74b3db5bb41d [test] silence warnings for unittest_cwctl by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6632
diff changeset
    78
                                   funcname=None)
74b3db5bb41d [test] silence warnings for unittest_cwctl by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6632
diff changeset
    79
            for script, args in scripts.items():
74b3db5bb41d [test] silence warnings for unittest_cwctl by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6632
diff changeset
    80
                scriptname = os.path.join(self.datadir, 'scripts', script)
10600
180aa08cad48 [tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10353
diff changeset
    81
                self.assertTrue(os.path.exists(scriptname))
9639
74b3db5bb41d [test] silence warnings for unittest_cwctl by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6632
diff changeset
    82
                mih.cmd_process_script(scriptname, None, scriptargs=args)
5430
ed8f71e244f8 [shell] #715938: support of script parameters (using standard '--' as arguments separator)
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5426
diff changeset
    83
ed8f71e244f8 [shell] #715938: support of script parameters (using standard '--' as arguments separator)
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5426
diff changeset
    84
12691
3f0e64630d94 [test] Rename TestCommand to avoid PytestCollectionWarning
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12685
diff changeset
    85
class _TestCommand(InstanceCommand):
12685
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    86
    "I need some doc"
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    87
    name = "test"
12695
38dfd90c335a [test] Add an "actionverb" attribute to test commands
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12694
diff changeset
    88
    actionverb = 'failtested'
12685
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    89
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    90
    def test_instance(self, appid):
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    91
        pass
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    92
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
    93
12692
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
    94
class _TestFailCommand(InstanceCommand):
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
    95
    "I need some doc"
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
    96
    name = "test_fail"
12695
38dfd90c335a [test] Add an "actionverb" attribute to test commands
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12694
diff changeset
    97
    actionverb = 'tested'
12692
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
    98
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
    99
    def test_fail_instance(self, appid):
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   100
        raise Exception()
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   101
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   102
12685
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
   103
class InstanceCommandTest(unittest.TestCase):
12692
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   104
    def setUp(self):
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   105
        self.CWCTL = CommandLine('cubicweb-ctl', 'The CubicWeb swiss-knife.',
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   106
                                 version=cw_version, check_duplicated_command=False)
12685
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
   107
        cwcfg.load_cwctl_plugins()
12692
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   108
        self.CWCTL.register(_TestCommand)
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   109
        self.CWCTL.register(_TestFailCommand)
12685
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
   110
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
   111
        # pretend that this instance exists
12693
5e7212209ea6 [test] ensure mocking is stopped in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12692
diff changeset
   112
        patcher = patch.object(cwcfg, 'config_for', return_value=object())
5e7212209ea6 [test] ensure mocking is stopped in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12692
diff changeset
   113
        patcher.start()
5e7212209ea6 [test] ensure mocking is stopped in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12692
diff changeset
   114
        self.addCleanup(patcher.stop)
12685
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
   115
12693
5e7212209ea6 [test] ensure mocking is stopped in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12692
diff changeset
   116
    @patch.object(_TestCommand, 'test_instance', return_value=0)
5e7212209ea6 [test] ensure mocking is stopped in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12692
diff changeset
   117
    def test_getting_called(self, test_instance):
12694
58f132392cba [test] use self.assertRaises() in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12693
diff changeset
   118
        with self.assertRaises(SystemExit) as cm:
12692
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   119
            self.CWCTL.run(["test", "some_instance"])
12694
58f132392cba [test] use self.assertRaises() in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12693
diff changeset
   120
        self.assertEqual(cm.exception.code, 0)
12693
5e7212209ea6 [test] ensure mocking is stopped in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12692
diff changeset
   121
        test_instance.assert_called_with("some_instance")
12685
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
   122
12692
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   123
    @patch.object(cwctl, 'get_pdb')
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   124
    def test_pdb_not_called(self, get_pdb):
12694
58f132392cba [test] use self.assertRaises() in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12693
diff changeset
   125
        # CWCTL will finish the program after that
58f132392cba [test] use self.assertRaises() in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12693
diff changeset
   126
        with self.assertRaises(SystemExit) as cm:
12692
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   127
            self.CWCTL.run(["test", "some_instance"])
12694
58f132392cba [test] use self.assertRaises() in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12693
diff changeset
   128
        self.assertEqual(cm.exception.code, 0)
12692
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   129
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   130
        get_pdb.assert_not_called()
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   131
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   132
    @patch.object(cwctl, 'get_pdb')
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   133
    def test_pdb_called(self, get_pdb):
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   134
        post_mortem = get_pdb.return_value.post_mortem
12694
58f132392cba [test] use self.assertRaises() in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12693
diff changeset
   135
        with self.assertRaises(SystemExit) as cm:
12692
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   136
            self.CWCTL.run(["test_fail", "some_instance", "--pdb"])
12694
58f132392cba [test] use self.assertRaises() in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12693
diff changeset
   137
        self.assertEqual(cm.exception.code, 8)
12692
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   138
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   139
        get_pdb.assert_called_once()
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   140
        post_mortem.assert_called_once()
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   141
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   142
    @patch.dict(sys.modules, ipdb=MagicMock())
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   143
    def test_ipdb_selected_and_called(self):
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   144
        ipdb = sys.modules['ipdb']
12694
58f132392cba [test] use self.assertRaises() in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12693
diff changeset
   145
        with self.assertRaises(SystemExit) as cm:
12692
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   146
            self.CWCTL.run(["test_fail", "some_instance", "--pdb"])
12694
58f132392cba [test] use self.assertRaises() in cwctl tests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12693
diff changeset
   147
        self.assertEqual(cm.exception.code, 8)
12692
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   148
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   149
        ipdb.post_mortem.assert_called_once()
8673da7c2f85 [cubicweb-ctl] add '--pdb' global option to launch (i)pdb on exception
Laurent Peuch <cortex@worlddomination.be>
parents: 12691
diff changeset
   150
12696
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   151
    @patch.object(_TestFailCommand, 'test_fail_instance', side_effect=SystemExit(42))
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   152
    def test_respect_return_error_code(self, test_fail_instance):
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   153
        with self.assertRaises(SystemExit) as cm:
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   154
            self.CWCTL.run(["test_fail", "some_instance"])
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   155
        self.assertEqual(cm.exception.code, 42)
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   156
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   157
        test_fail_instance.assert_called_once()
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   158
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   159
    @patch.object(_TestFailCommand, 'test_fail_instance', side_effect=KeyboardInterrupt)
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   160
    def test_error_code_keyboardinterupt_2(self, test_fail_instance):
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   161
        with self.assertRaises(SystemExit) as cm:
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   162
            self.CWCTL.run(["test_fail", "some_instance"])
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   163
        self.assertEqual(cm.exception.code, 2)
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   164
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   165
        test_fail_instance.assert_called_once()
eb83daa69495 [cubicweb-ctl] respect sys.exit status code when aborting a command
Laurent Peuch <cortex@worlddomination.be>
parents: 12695
diff changeset
   166
12685
84a8a8915512 [cubicweb-ctl] move to accepting only once instance name per command
Laurent Peuch <cortex@worlddomination.be>
parents: 12568
diff changeset
   167
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   168
if __name__ == '__main__':
11469
e0538fee4caa [test] Use plain unittest in unittest_cwctl.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   169
    unittest.main()