Example #1
0
File: cli.py Project: pmdz/smite
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)
Example #2
0
File: tests.py Project: pmdz/smite
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()