def create_certificates(argv=sys.argv): if len(argv) < 3: cmd = os.path.basename(argv[0]) print(u"usage: {0} <KEYS_DIR> <NAME>\n" u'(example: "{0} /home/user/keys/ my_secret")'.format(cmd)) sys.exit(1) keys_dir = argv[1] name = argv[2] if not os.path.exists(keys_dir): print(u"Dir not exists: {}".format(keys_dir)) sys.exit(1) if not os.path.isdir(keys_dir): print(u"'{}' is noot directory: {}".format(keys_dir)) sys.exit(1) utils.create_certificates(keys_dir, name)
def test_secure_messaging(): keys_dir = create_keys_dir() def short_echo(text): time.sleep(1) return text def long_echo(text): time.sleep(2) return text send_msgs = ['short_echo', 'long_echo'] # generate keys for clients client_secrets = [ utils.create_certificates(keys_dir, 'client-{}'.format(i))[1] for i in range(2) ] # generate keys for servant servant_public, servant_secret = ( utils.create_certificates(keys_dir, 'servant') ) servant = Servant({'short_echo': short_echo, 'long_echo': long_echo}) servant.enable_security( os.path.join(keys_dir, 'public_keys'), servant_secret, ) servant.bind_tcp(HOST, PORT) servant_thread = Thread(target=servant.run) servant_thread.start() class send_msg(object): def __init__(self, message_name, client_secret): self.message_name = message_name self.client_secret = client_secret def __call__(self): client = Client() client.enable_security(self.client_secret, servant_public) client.connect(CONNECTION_URI) txt = uuid.uuid4().hex res = client.send(self.message_name, args=(txt,)) assert res == txt client.close() client_threads = [] for client_secret, method_name in zip(client_secrets, send_msgs): thread = Thread(target=send_msg(method_name, client_secret)) client_threads.append(thread) thread.start() # long echo takes 2 seconds time.sleep(2.5) assert servant.stats['summary']['received_messages'] == 2 assert servant.stats['summary']['processed_messages'] == 2 assert servant.stats['summary']['exceptions'] == 0 servant.stop() servant_thread.join() for client_thread in client_threads: client_thread.join()