diff --git a/tests/base_test_agent.py b/tests/base_test_agent.py index 7076165..b873b7e 100644 --- a/tests/base_test_agent.py +++ b/tests/base_test_agent.py @@ -54,7 +54,8 @@ def modify_seeders(self, seeders, bootstrap): def callback(self, message): logging.info(message) - self.message = "".join(map(chr, message.data)) + self.message = message.attributes['msg'] + self.data = "".join(map(chr, message.data)) message.ack() logging.info(message.attributes['phase']) if self.phase != message.attributes['phase']: @@ -102,6 +103,7 @@ def get_dht_size(self): results = pattern.match(line) if results != None: return results.group(1) + time.sleep(1) return 0 if __name__ == '__main__': diff --git a/tests/base_test_ci.py b/tests/base_test_ci.py index da6722b..e511131 100644 --- a/tests/base_test_ci.py +++ b/tests/base_test_ci.py @@ -1,4 +1,5 @@ from dockers import Docker +from nodes import Nodes import config import os import time @@ -13,7 +14,7 @@ class BaseTest(unittest.TestCase): def setUp(self): logging.basicConfig(format='%(asctime)s %(message)s', level=logging.INFO) - self.nodes_list = [] + self.nodes_list = Nodes() self.phases = [] self.endFlag = False self.testLen = 60 @@ -47,11 +48,12 @@ def create_phase(self, phase = ""): self.phases.append(self.phase) return self.phase - def send(self, data): + def send(self, msg, data = 'NULL', target_node = None): self.messages = [] + logging.info(msg) logging.info(data) data = data.encode('utf-8') - self.publisher_downstream.publish(self.topic_path_downstream, data=data, phase=self.phase) + self.publisher_downstream.publish(self.topic_path_downstream, data=data, phase=self.phase, msg=msg, node=target_node) def wait_for_response(self, num_messages = 1): for i in range(0, self.testLen): @@ -60,12 +62,18 @@ def wait_for_response(self, num_messages = 1): break time.sleep(1) - def send_and_wait(self, data, nodes): - self.send(data) + def send_and_wait(self, msg, nodes, data = 'NULL'): + self.send(msg, data) self.wait_for_response(nodes) self.assertEqual(nodes, len(self.messages)) return self.messages + def send_to_node(self, msg, node, data = 'NULL', expected_msgs = 1) + self.send(msg, data) + self.wait_for_response(expected_msgs) + self.assertEqual(expected_msgs, len(self.messages)) + return self.messages + def start_node_agent_pair(self, seeders=config.CONFIG['no_seeders'], bootstrap = 'false'): docker = Docker() docker.stop('agent_' + str(self.agents)) @@ -77,7 +85,7 @@ def run_phase(self, nodes = 1, seeders=config.CONFIG['no_seeders'], bootstrap = self.create_phase(len(self.phases)) for i in range(0, nodes): self.start_node_agent_pair(seeders = seeders, bootstrap = bootstrap) - self.send_and_wait('GET_NODE_ID', nodes) + self.send_and_wait(msg = 'GET_NODE_ID', data = 'NULL', nodes = nodes) self.nodes_list += self.messages return self.messages diff --git a/tests/nodes.py b/tests/nodes.py new file mode 100644 index 0000000..c79a7be --- /dev/null +++ b/tests/nodes.py @@ -0,0 +1,25 @@ +import logging +from logging import Logger + +class Nodes(): + def __init__(self): + self.nodes = [] + + def add(self, node): + self.nodes.append(node) + + def __iadd__(self, l): + self.nodes += l + return self + + def get_nodes(self, num): + if num < len(self.nodes): + return None + + tmp = self.nodes + selected_nodes = [] + for i in range(0, num): + select = random.randint(0, len(tmp)) + selected_nodes.append(tmp[select]) + del tmp[select] + return selected_nodes \ No newline at end of file diff --git a/tests/test_2.py b/tests/test_2.py index 3451b45..06eef48 100644 --- a/tests/test_2.py +++ b/tests/test_2.py @@ -20,7 +20,7 @@ def test_sendId(self): seeders_str = '\'["' + '","'.join(self.messages) + '"]\'' logging.info(seeders_str) self.run_phase(nodes = testers_nodes, bootstrap = 'true', seeders = seeders_str) - messages = self.send_and_wait('GET_DHT_SIZE', testers_nodes) + messages = self.send_and_wait(msg = 'GET_DHT_SIZE', nodes = testers_nodes) for i in range(0, testers_nodes): self.assertEqual(seeders_nodes + testers_nodes, int(messages[i]))