debug: add debugwireargs to test argument passing over the wire

Tests argument passing locally, via HTTP, and via SSH. This is mainly preparation
for the next patch.
This commit is contained in:
Peter Arrenbrecht 2011-03-22 07:38:32 +01:00
parent 27bf9fafce
commit 375ab88b9f
5 changed files with 83 additions and 1 deletions

View File

@ -1582,6 +1582,21 @@ def debugwalk(ui, repo, *pats, **opts):
line = fmt % (abs, m.rel(abs), m.exact(abs) and 'exact' or '')
ui.write("%s\n" % line.rstrip())
def debugwireargs(ui, repopath, *vals, **opts):
repo = hg.repository(hg.remoteui(ui, opts), repopath)
for opt in remoteopts:
del opts[opt[1]]
args = {}
for k, v in opts.iteritems():
if v:
args[k] = v
# run twice to check that we don't mess up the stream for the next command
res1 = repo.debugwireargs(*vals, **args)
res2 = repo.debugwireargs(*vals, **args)
ui.write("%s\n" % res1)
if res1 != res2:
ui.warn("%s\n" % res2)
def diff(ui, repo, *pats, **opts):
"""diff repository (or selected files)
@ -4456,6 +4471,12 @@ table = {
_('revision to check'), _('REV'))],
_('[-r REV] [REV]')),
"debugwalk": (debugwalk, walkopts, _('[OPTION]... [FILE]...')),
"debugwireargs":
(debugwireargs,
[('', 'three', '', 'three'),
('', 'four', '', 'four'),
] + remoteopts,
_('REPO [OPTIONS]... [ONE [TWO]]')),
"^diff":
(diff,
[('r', 'rev', [],
@ -4789,6 +4810,6 @@ table = {
}
norepo = ("clone init version help debugcommands debugcomplete"
" debugdate debuginstall debugfsinfo debugpushkey")
" debugdate debuginstall debugfsinfo debugpushkey debugwireargs")
optionalrepo = ("identify paths serve showconfig debugancestor debugdag"
" debugdata debugindex debugindexdot")

View File

@ -1905,6 +1905,10 @@ class localrepository(repo.repository):
def listkeys(self, namespace):
return pushkey.list(self, namespace)
def debugwireargs(self, one, two, three=None, four=None):
'''used to test argument passing over the wire'''
return "%s %s %s %s" % (one, two, three, four)
# used to avoid circular references so destructors work
def aftertrans(files):
renamefiles = [tuple(t) for t in files]

View File

@ -133,6 +133,15 @@ class wirerepository(repo.repository):
self.ui.status(_('remote: '), l)
return ret
def debugwireargs(self, one, two, three=None, four=None):
# don't pass optional arguments left at their default value
opts = {}
if three is not None:
opts['three'] = three
if four is not None:
opts['four'] = four
return self._call('debugwireargs', one=one, two=two, **opts)
# server side
class streamres(object):
@ -199,6 +208,9 @@ def changegroupsubset(repo, proto, bases, heads):
cg = repo.changegroupsubset(bases, heads, 'serve')
return streamres(proto.groupchunks(cg))
def debugwireargs(repo, proto, one, two):
return repo.debugwireargs(one, two)
def heads(repo, proto):
h = repo.heads()
return encodelist(h) + "\n"
@ -343,6 +355,7 @@ commands = {
'capabilities': (capabilities, ''),
'changegroup': (changegroup, 'roots'),
'changegroupsubset': (changegroupsubset, 'bases heads'),
'debugwireargs': (debugwireargs, 'one two'),
'heads': (heads, ''),
'hello': (hello, ''),
'listkeys': (listkeys, 'namespace'),

View File

@ -87,6 +87,7 @@ Show debug commands if there are no other candidates
debugstate
debugsub
debugwalk
debugwireargs
Do not show the alias of a debug command if there are other candidates
(this should hide rawcommit)
@ -227,6 +228,7 @@ Show all commands + options
debugstate: nodates
debugsub: rev
debugwalk: include, exclude
debugwireargs: three, four, ssh, remotecmd, insecure
grep: print0, all, follow, ignore-case, files-with-matches, line-number, rev, user, date, include, exclude
heads: rev, topo, active, closed, style, template
help:

42
tests/test-wireproto.t Normal file
View File

@ -0,0 +1,42 @@
Test wire protocol argument passing
Setup repo:
$ hg init repo
Local:
$ hg debugwireargs repo eins zwei
eins zwei None None
HTTP:
$ hg serve -R repo -p $HGPORT -d --pid-file=hg1.pid -E error.log -A access.log
$ cat hg1.pid >> $DAEMON_PIDS
$ hg debugwireargs http://localhost:$HGPORT/ eins zwei
eins zwei None None
$ cat access.log
* - - [*] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob)
* - - [*] "GET /?cmd=debugwireargs&one=eins&two=zwei HTTP/1.1" 200 - (glob)
* - - [*] "GET /?cmd=debugwireargs&one=eins&two=zwei HTTP/1.1" 200 - (glob)
SSH (try to exercise the ssh functionality with a dummy script):
$ cat <<EOF > dummyssh
> import sys
> import os
> os.chdir(os.path.dirname(sys.argv[0]))
> if sys.argv[1] != "user@dummy":
> sys.exit(-1)
> if not os.path.exists("dummyssh"):
> sys.exit(-1)
> os.environ["SSH_CLIENT"] = "127.0.0.1 1 2"
> r = os.system(sys.argv[2])
> sys.exit(bool(r))
> EOF
$ hg debugwireargs --ssh "python ./dummyssh" ssh://user@dummy/repo eins zwei
eins zwei None None