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.util.encodingutil import quote_output
|
||||||
from allmydata.scripts.common import TahoeError
|
from allmydata.scripts.common import TahoeError
|
||||||
|
from socket import error as socket_error
|
||||||
|
|
||||||
# copied from twisted/web/client.py
|
# copied from twisted/web/client.py
|
||||||
def parse_url(url, defaultPort=None):
|
def parse_url(url, defaultPort=None):
|
||||||
|
@ -58,8 +58,16 @@ def do_http(method, url, body=""):
|
||||||
length = body.tell()
|
length = body.tell()
|
||||||
body.seek(old)
|
body.seek(old)
|
||||||
c.putheader("Content-Length", str(length))
|
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:
|
while True:
|
||||||
data = body.read(8192)
|
data = body.read(8192)
|
||||||
if not data:
|
if not data:
|
||||||
|
|
|
@ -13,6 +13,8 @@ from allmydata.immutable import upload
|
||||||
from allmydata.interfaces import MDMF_VERSION, SDMF_VERSION
|
from allmydata.interfaces import MDMF_VERSION, SDMF_VERSION
|
||||||
from allmydata.mutable.publish import MutableData
|
from allmydata.mutable.publish import MutableData
|
||||||
from allmydata.dirnode import normalize
|
from allmydata.dirnode import normalize
|
||||||
|
from allmydata.scripts.common_http import socket_error
|
||||||
|
import allmydata.scripts.common_http
|
||||||
from pycryptopp.publickey import ed25519
|
from pycryptopp.publickey import ed25519
|
||||||
|
|
||||||
# Test that the scripts can be imported.
|
# Test that the scripts can be imported.
|
||||||
|
@ -3279,6 +3281,28 @@ class Errors(GridTestMixin, CLITestMixin, unittest.TestCase):
|
||||||
|
|
||||||
return d
|
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):
|
class Get(GridTestMixin, CLITestMixin, unittest.TestCase):
|
||||||
def test_get_without_alias(self):
|
def test_get_without_alias(self):
|
||||||
|
|
Loading…
Reference in New Issue