memgraph/tests/distributed/raft/example_test.py
Marko Culinovic 7a06040a76 Setup RAFT test infrastructure
Summary:
`JailService` exposes jail API and knows how to
start and stop binaries. Every test should be
defined as python module with exposed
`run` method. Script `master.py` is used
for running tests and takes test module
name as argument. Machine IP addresses are
defined in environment variables. To run test
locally use `local_runner` script.

Reviewers: mislav.bradac, mferencevic, mtomic

Reviewed By: mferencevic

Subscribers: pullbot

Differential Revision: https://phabricator.memgraph.io/D1065
2018-01-05 09:59:42 +01:00

62 lines
1.9 KiB
Python

import logging
import os
import time
import xmlrpc.client
NUM_MACHINES = 2
# binaries to run
CLIENT_BINARY = "tests/distributed/raft/example_client"
SERVER_BINARY = "tests/distributed/raft/example_server"
def run(machine_ids, workers):
logging.basicConfig(level=logging.INFO)
log = logging.getLogger("example_test")
log.info("Start")
# define interfaces and ports for binaries
server_interface = os.environ[machine_ids[1]]
server_port = str(10000)
client_interface = os.environ[machine_ids[0]]
client_port = str(10010)
# start binaries
log_abs_path = workers[machine_ids[1]].allocate_file()
server_tid = workers[machine_ids[1]].get_jail()
server_args = ["--interface", server_interface]
server_args += ["--port", server_port]
server_args += ["--log", log_abs_path]
workers[machine_ids[1]].start(server_tid, SERVER_BINARY, server_args)
client_tid = workers[machine_ids[0]].get_jail()
client_args = ["--interface", client_interface]
client_args += ["--port", client_port]
client_args += ["--server-interface", server_interface]
client_args += ["--server-port", server_port]
workers[machine_ids[0]].start(client_tid, CLIENT_BINARY, client_args)
# crash server
workers[machine_ids[1]].stop(server_tid)
time.sleep(5)
workers[machine_ids[1]].start(server_tid, SERVER_BINARY, server_args)
# wait for test to finish
time.sleep(5)
# stop binaries
workers[machine_ids[0]].stop(client_tid)
workers[machine_ids[1]].stop(server_tid)
# fetch log
result = workers[machine_ids[1]].read_file(log_abs_path)
if result is not None:
local_log = "local_log.txt"
result = result.data.decode('ascii')
if result.splitlines() == ["{}".format(x) for x in range(1, 101)]:
log.warn("Test successful")
else:
raise Exception("Test failed")
log.info("End")