fix buggy test; restructure data

scared about duplicate nodeids in the data getting lost, switch to a list
This commit is contained in:
Jean-Paul Calderone 2017-07-25 11:56:42 -04:00
parent 754304e4d5
commit 7027547ecc
2 changed files with 63 additions and 31 deletions

View File

@ -262,7 +262,7 @@ class FakeClient(Client):
last_connect_time = 10, last_loss_time = 20, last_rx_time = 30))
self.storage_broker.test_add_server("disconnected_nodeid",
FakeDisplayableServer(
serverid="other_nodeid", nickname=u"disconnected_nickname \u263B", connected = False,
serverid="disconnected_nodeid", nickname=u"disconnected_nickname \u263B", connected = False,
last_connect_time = None, last_loss_time = 25, last_rx_time = 35))
self.introducer_client = None
self.history = FakeHistory()
@ -739,6 +739,7 @@ class Web(WebMixin, WebErrorMixin, testutil.StallMixin, testutil.ReallyEqualMixi
def test_create(self):
pass
maxDiff = None
def test_welcome_json(self):
"""
There is a JSON version of the welcome page which can be selected with the
@ -748,16 +749,29 @@ class Web(WebMixin, WebErrorMixin, testutil.StallMixin, testutil.ReallyEqualMixi
def _check(res):
decoded = json.loads(res)
expected = {
'introducers': {'statuses': []},
'servers': {
'other_nodeid': {
'available_space': 123456,
'connection_status': 'summary',
'last_received_data': u'',
'nickname': u'other_nickname \u263b',
'version': '1.0',
},
u'introducers': {
u'statuses': [],
},
u'servers': sorted([
{u"nodeid": u'other_nodeid',
u"description": {
u'available_space': 123456,
u'connection_status': u'summary',
u'last_received_data': None,
u'nickname': u'other_nickname \u263b',
u'version': u'1.0',
},
},
{u"nodeid": u'disconnected_nodeid',
u"description": {
u'available_space': 123456,
u'connection_status': u'summary',
u'last_received_data': None,
u'nickname': u'disconnected_nickname \u263b',
u'version': u'1.0',
},
},
]),
}
self.assertEqual(expected, decoded)
d.addCallback(_check)

View File

@ -197,32 +197,50 @@ class Root(MultiFormatPage):
def data_my_nickname(self, ctx, data):
return self.client.nickname
def render_JSON(self, req):
req.setHeader("content-type", "application/json; charset=utf-8")
intro_summaries = [s.summary for s in self.client.introducer_connection_statuses()]
sb = self.client.get_storage_broker()
servers = {}
for server in sb.get_known_servers():
server_id = server.get_serverid()
servers[server_id] = {}
servers[server_id]["connection_status"] = server.get_connection_status().summary
servers[server_id]["available_space"] = server.get_available_space()
servers[server_id]["nickname"] = server.get_nickname()
if server.get_version() is not None:
servers[server_id]["version"] = server.get_version()["application-version"]
else:
servers[server_id]["version"] = ""
if server.rref is not None:
servers[server_id]["last_received_data"] = server.rref.getDataLastReceivedAt()
else:
servers[server_id]["last_received_data"] = ""
data = {
"introducers": {
"statuses": intro_summaries,
},
"servers": servers
servers = self._describe_known_servers(sb)
result = {
"introducers": {
"statuses": intro_summaries,
},
"servers": servers
}
return json.dumps(result, indent=1) + "\n"
def _describe_known_servers(self, broker):
return sorted(list(
{
u"nodeid": server.get_serverid(),
u"description": self._describe_server(server),
}
return json.dumps(data, indent=1) + "\n"
for server
in broker.get_known_servers()
))
def _describe_server(self, server):
description = {
u"connection_status": server.get_connection_status().summary,
u"available_space": server.get_available_space(),
u"nickname": server.get_nickname(),
u"version": None,
u"last_received_data": None,
}
version = server.get_version()
if version is not None:
description[u"version"] = version["application-version"]
rref = server.rref
if rref is not None:
description[u"last_received_data"] = rref.getDataLastReceivedAt()
return description
def render_magic_folder(self, ctx, data):
if self.client._magic_folder is None: