When the CLI cannot connect to the gateway, it prints an error message rather than raising a python exception. Includes a unit test
Signed-off-by: Andrew Miller <amiller@dappervision.com>
This commit is contained in:
parent
ca620a6ce1
commit
4f19f2b4b4
|
@ -6,7 +6,7 @@ import allmydata # for __full_version__
|
|||
|
||||
from allmydata.util.encodingutil import quote_output
|
||||
from allmydata.scripts.common import TahoeError
|
||||
|
||||
from socket import error as socket_error
|
||||
|
||||
# copied from twisted/web/client.py
|
||||
def parse_url(url, defaultPort=None):
|
||||
|
@ -58,7 +58,15 @@ def do_http(method, url, body=""):
|
|||
length = body.tell()
|
||||
body.seek(old)
|
||||
c.putheader("Content-Length", str(length))
|
||||
c.endheaders()
|
||||
|
||||
try:
|
||||
c.endheaders()
|
||||
except socket_error, err:
|
||||
class BadResponse(object):
|
||||
status=-1
|
||||
reason="Error trying to connect to %s: %s" % (url, err)
|
||||
read=lambda _: ""
|
||||
return BadResponse()
|
||||
|
||||
while True:
|
||||
data = body.read(8192)
|
||||
|
|
|
@ -13,6 +13,8 @@ from allmydata.immutable import upload
|
|||
from allmydata.interfaces import MDMF_VERSION, SDMF_VERSION
|
||||
from allmydata.mutable.publish import MutableData
|
||||
from allmydata.dirnode import normalize
|
||||
from allmydata.scripts.common_http import socket_error
|
||||
import allmydata.scripts.common_http
|
||||
from pycryptopp.publickey import ed25519
|
||||
|
||||
# Test that the scripts can be imported.
|
||||
|
@ -3279,6 +3281,28 @@ class Errors(GridTestMixin, CLITestMixin, unittest.TestCase):
|
|||
|
||||
return d
|
||||
|
||||
def test_broken_socket(self):
|
||||
# When the http connection breaks (such as when node.url is overwritten
|
||||
# by a confused user), a user friendly error message should be printed.
|
||||
self.basedir = "cli/Errors/test_broken_socket"
|
||||
self.set_up_grid()
|
||||
|
||||
# Simulate a connection error
|
||||
endheaders = allmydata.scripts.common_http.httplib.HTTPConnection.endheaders
|
||||
def _fix_endheaders(*args):
|
||||
allmydata.scripts.common_http.httplib.HTTPConnection.endheaders = endheaders
|
||||
def _socket_error(*args, **kwargs):
|
||||
raise socket_error('test error')
|
||||
allmydata.scripts.common_http.httplib.HTTPConnection.endheaders = _socket_error
|
||||
|
||||
d = self.do_cli("mkdir")
|
||||
def _check_invalid((rc,stdout,stderr)):
|
||||
self.failIfEqual(rc, 0)
|
||||
self.failUnlessIn("Error trying to connect to http://127.0.0.1", stderr)
|
||||
d.addCallback(_check_invalid)
|
||||
d.addCallback(_fix_endheaders)
|
||||
return d
|
||||
|
||||
|
||||
class Get(GridTestMixin, CLITestMixin, unittest.TestCase):
|
||||
def test_get_without_alias(self):
|
||||
|
|
Loading…
Reference in New Issue