tests/test-bad-extension.t
author Gregory Szorc <gregory.szorc@gmail.com>
Sun, 04 Feb 2018 14:10:56 -0800
changeset 35937 a9cffd14aa04
parent 33097 fce4ed2912bb
child 38532 9ee202679a76
permissions -rw-r--r--
sshpeer: inline I/O into _validaterepo() We want to move the handshake code out of the peer class so the peer factory function can perform the handshake and instantiate a proper class depending on the results. To make that refactor easier to read, we first inline I/O functionality into _validaterepo(). Test output for low-level protocol tests didn't change, thus hopefully demonstrating that this refactor didn't change any material behavior. Because we no longer call _callstream(), our test extension for monkeypatching the peer had to change its hook point. Differential Revision: https://phab.mercurial-scm.org/D2033
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31957
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
     1
ensure that failing ui.atexit handlers report sensibly
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
     2
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
     3
  $ cat > $TESTTMP/bailatexit.py <<EOF
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
     4
  > from mercurial import util
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
     5
  > def bail():
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
     6
  >     raise RuntimeError('ui.atexit handler exception')
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
     7
  > 
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
     8
  > def extsetup(ui):
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
     9
  >     ui.atexit(bail)
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    10
  > EOF
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    11
  $ hg -q --config extensions.bailatexit=$TESTTMP/bailatexit.py \
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    12
  >  help help
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    13
  hg help [-ecks] [TOPIC]
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    14
  
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    15
  show help for a given topic or a help overview
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    16
  error in exit handlers:
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    17
  Traceback (most recent call last):
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    18
    File "*/mercurial/dispatch.py", line *, in _runexithandlers (glob)
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    19
      func(*args, **kwargs)
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    20
    File "$TESTTMP/bailatexit.py", line *, in bail (glob)
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    21
      raise RuntimeError('ui.atexit handler exception')
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    22
  RuntimeError: ui.atexit handler exception
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    23
  [255]
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    24
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    25
  $ rm $TESTTMP/bailatexit.py
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    26
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    27
another bad extension
84f9eb9758c0 atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents: 30027
diff changeset
    28
11858
934c7e91c126 tests: unify test-bad-extension
Martin Geisler <mg@lazybytes.net>
parents: 6204
diff changeset
    29
  $ echo 'raise Exception("bit bucket overflow")' > badext.py
28083
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    30
  $ abspathexc=`pwd`/badext.py
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    31
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    32
  $ cat >baddocext.py <<EOF
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    33
  > """
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    34
  > baddocext is bad
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    35
  > """
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    36
  > EOF
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    37
  $ abspathdoc=`pwd`/baddocext.py
3014
01454af644b8 load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    38
23172
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 14286
diff changeset
    39
  $ cat <<EOF >> $HGRCPATH
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 14286
diff changeset
    40
  > [extensions]
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 14286
diff changeset
    41
  > gpg =
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 14286
diff changeset
    42
  > hgext.gpg =
28083
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    43
  > badext = $abspathexc
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    44
  > baddocext = $abspathdoc
23172
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 14286
diff changeset
    45
  > badext2 =
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 14286
diff changeset
    46
  > EOF
3014
01454af644b8 load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    47
26239
f39953663cc9 test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents: 25364
diff changeset
    48
  $ hg -q help help 2>&1 |grep extension
12640
6cc4b14fb76b tests: remove redundant globs
Mads Kiilerich <mads@kiilerich.com>
parents: 12376
diff changeset
    49
  *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow
12375
02990e22150b tests: require regexes in unified tests to be marked with " (re)"
Brodie Rao <brodie@bitheap.org>
parents: 11858
diff changeset
    50
  *** failed to import extension badext2: No module named badext2
25364
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    51
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    52
show traceback
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    53
26239
f39953663cc9 test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents: 25364
diff changeset
    54
  $ hg -q help help --traceback 2>&1 | egrep ' extension|^Exception|Traceback|ImportError'
25364
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    55
  *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    56
  Traceback (most recent call last):
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    57
  Exception: bit bucket overflow
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    58
  *** failed to import extension badext2: No module named badext2
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    59
  Traceback (most recent call last):
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    60
  ImportError: No module named badext2
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    61
28155
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    62
names of extensions failed to load can be accessed via extensions.notloaded()
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    63
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    64
  $ cat <<EOF > showbadexts.py
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31957
diff changeset
    65
  > from mercurial import commands, extensions, registrar
28155
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    66
  > cmdtable = {}
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31957
diff changeset
    67
  > command = registrar.command(cmdtable)
33097
fce4ed2912bb py3: make sure commands name are bytes in tests
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32337
diff changeset
    68
  > @command(b'showbadexts', norepo=True)
28155
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    69
  > def showbadexts(ui, *pats, **opts):
28338
9974b8236cac tests: Solaris grep doesn't add a trailing newline when it's missing
Danek Duvall <danek.duvall@oracle.com>
parents: 28155
diff changeset
    70
  >     ui.write('BADEXTS: %s\n' % ' '.join(sorted(extensions.notloaded())))
28155
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    71
  > EOF
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    72
  $ hg --config extensions.badexts=showbadexts.py showbadexts 2>&1 | grep '^BADEXTS'
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    73
  BADEXTS: badext badext2
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    74
25364
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    75
show traceback for ImportError of hgext.name if debug is set
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    76
(note that --debug option isn't applied yet when loading extensions)
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    77
26239
f39953663cc9 test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents: 25364
diff changeset
    78
  $ (hg -q help help --traceback --config ui.debug=True 2>&1) \
f39953663cc9 test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents: 25364
diff changeset
    79
  > | grep -v '^ ' \
f39953663cc9 test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents: 25364
diff changeset
    80
  > | egrep 'extension..[^p]|^Exception|Traceback|ImportError|not import'
25364
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    81
  *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    82
  Traceback (most recent call last):
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    83
  Exception: bit bucket overflow
30027
ebe488e04ca3 extensions: fix a debug message when searching for extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 28737
diff changeset
    84
  could not import hgext.badext2 (No module named *badext2): trying hgext3rd.badext2 (glob)
25364
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    85
  Traceback (most recent call last):
27538
50ad3f25fb4c test-bad-extension: account for PyPy/CPython error difference
Bryan O'Sullivan <bos@serpentine.com>
parents: 26239
diff changeset
    86
  ImportError: No module named *badext2 (glob)
28737
a3a01194a337 pypy: fix overspecific test checks
Maciej Fijalkowski <fijall@gmail.com>
parents: 28541
diff changeset
    87
  could not import hgext3rd.badext2 (No module named *badext2): trying badext2 (glob)
28541
4b81487a01d4 extensions: also search for extension in the 'hgext3rd' package
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 28338
diff changeset
    88
  Traceback (most recent call last):
28737
a3a01194a337 pypy: fix overspecific test checks
Maciej Fijalkowski <fijall@gmail.com>
parents: 28541
diff changeset
    89
  ImportError: No module named *badext2 (glob)
25364
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    90
  *** failed to import extension badext2: No module named badext2
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    91
  Traceback (most recent call last):
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    92
  ImportError: No module named badext2
28083
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    93
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    94
confirm that there's no crash when an extension's documentation is bad
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    95
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    96
  $ hg help --keyword baddocext
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    97
  *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    98
  *** failed to import extension badext2: No module named badext2
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    99
  Topics:
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
   100
  
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
   101
   extensions Using Additional Features