From a04a556a86d7c02f44a9bee82453d2d92000287c Mon Sep 17 00:00:00 2001 From: LV-426 Date: Fri, 2 Jan 2015 17:26:59 +0200 Subject: test_rz_mesh.py: practical rewrite, supported test functions: - test_ws_event__topo_diff() - test_ws_event__attr_diff() - test_REST_post_triggers_ws_multicast__topo_diff() --- src/server-tests/test_rz_mesh.py | 99 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 91 insertions(+), 8 deletions(-) (limited to 'src/server-tests') diff --git a/src/server-tests/test_rz_mesh.py b/src/server-tests/test_rz_mesh.py index 9dcec19d..11402004 100644 --- a/src/server-tests/test_rz_mesh.py +++ b/src/server-tests/test_rz_mesh.py @@ -3,11 +3,13 @@ import json import logging from socketIO_client import SocketIO, BaseNamespace import unittest +import urllib2 +import test_util from model.graph import Topo_Diff +from model.graph import Attr_Diff from neo4j_test_util import rand_id - class TestMeshAPI(unittest.TestCase): """ currently requires a running rhizi server instance @@ -31,12 +33,56 @@ class TestMeshAPI(unittest.TestCase): def __enter__(self): sock = SocketIO('rhizi.local', 8080) ns_sock = sock.define(self.namespace, '/graph') + self.sock = sock return sock, ns_sock def __exit__(self, e_type, e_value, e_traceback): - pass + self.sock.disconnect() + + def _emit_tx_topo_diff(self): + with TestMeshAPI.rz_socket() as (_, ns_sock): + n_set = [{'__label_set': ['xxx'], 'id': rand_id() }] + topo_diff = Topo_Diff(node_set_add=n_set) + data = json.dumps(topo_diff, cls=Topo_Diff.JSON_Encoder) + ns_sock.emit('diff_commit__topo', data) - def x_test_add_node_set(self): + def test_REST_post_triggers_ws_multicast__topo_diff(self): + + class NS_test(BaseNamespace): + + def on_diff_commit__topo(self, json_str): + topo_diff = Topo_Diff.from_json_dict(json_str) + n_id = topo_diff.node_set_add[0].get('id') + greenlet.getcurrent().n_id_received = n_id + + self._transport._connection.send_close() # FIXME: properly close socket, avoid c_1 socket wait + + n = test_util.generate_random_node_dict('test_ws_event__topo_diff') + n_id = n['id'] + topo_diff = Topo_Diff(node_set_add=[n]) + + def c_0(): + + with TestMeshAPI.rz_socket(namespace=NS_test) as (sock, _): + c1_t.switch() # allow peer to POST + sock.wait(8) # allow self to receive + + def c_1(): + data = json.dumps({'topo_diff': topo_diff.to_json_dict()}) + req = urllib2.Request(url='http://rhizi.local:8080/graph/diff-commit-topo', + data=data, + headers={'Content-Type': 'application/json'}) + + f = urllib2.urlopen(req) + f.close() + c0_t.switch() + + c0_t = greenlet(c_0) + c1_t = greenlet(c_1) + c0_t.switch() + self.assertEqual(c0_t.n_id_received, n_id) + + def test_ws_event__topo_diff(self): class NS_test(BaseNamespace): @@ -45,12 +91,11 @@ class TestMeshAPI(unittest.TestCase): n_id = todo_diff.node_set_add[0].get('id') greenlet.getcurrent().n_id_received = n_id - # FIXME: properly close socket, avoid c_1 socket wait - self._transport._connection.send_close() + self._transport._connection.send_close() # FIXME: properly close socket, avoid c_1 socket wait - n_id = rand_id() - n_set = [{'__type': 'xxx', 'id': n_id }] - topo_diff = Topo_Diff(node_set_add=n_set) + n = test_util.generate_random_node_dict('test_ws_event__topo_diff') + n_id = n['id'] + topo_diff = Topo_Diff(node_set_add=[n]) def c_0(): with TestMeshAPI.rz_socket(namespace=NS_test) as (_, ns_sock): @@ -70,6 +115,44 @@ class TestMeshAPI(unittest.TestCase): self.assertEqual(c1_t.n_id_received, n_id) + def test_ws_event__attr_diff(self): + + class NS_test(BaseNamespace): + + def on_diff_commit__attr(self, json_str): + attr_diff = Attr_Diff.from_json_dict(json.loads(json_str)) + n_id = attr_diff.type_node.node_set_add[0].get('id') + greenlet.getcurrent().n_id_received = n_id + + self._transport._connection.send_close() # FIXME: properly close socket, avoid c_1 socket wait + + n = test_util.generate_random_node_dict('test_ws_event__attr_diff') + n_id = n['id'] + + # apply attr_diff + attr_diff = Attr_Diff() + attr_diff.add_node_attr_write(n_id, 'attr_0', 0) + attr_diff.add_node_attr_write(n_id, 'attr_1', 'a') + attr_diff.add_node_attr_rm(n_id, 'attr_2') + + def c_0(): + with TestMeshAPI.rz_socket(namespace=NS_test) as (_, ns_sock): + c1_t.switch() # allow peer to connect + data = json.dumps(attr_diff) + ns_sock.emit('diff_commit__attr', data) + c1_t.switch() + + def c_1(): + with TestMeshAPI.rz_socket(namespace=NS_test) as (sock, _): + c0_t.switch() # allow peer to emit + sock.wait(8) # allow self to receive + + c0_t = greenlet(c_0) + c1_t = greenlet(c_1) + c0_t.switch() + + self.assertEqual(c1_t.n_id_received, n_id) + if __name__ == "__main__": unittest.main() -- cgit v1.3.1